/**
 * 订单相关API服务 - 修复版本
 * 解决this上下文和错误处理问题
 */
import apiClient from './axios'

/**
 * 处理API错误的工具函数
 * @param {Error} error 原始错误
 * @returns {Error} 处理后的错误
 */
function handleError(error) {
  if (error.response) {
    // 服务器响应错误
    const { status, data } = error.response
    const message = data?.detail || data?.message || `请求失败 (${status})`
    return new Error(message)
  } else if (error.request) {
    // 网络错误
    return new Error('网络连接失败，请检查网络')
  } else {
    // 其他错误
    return new Error(error.message || '未知错误')
  }
}

/**
 * 创建订单（发送到RabbitMQ队列）
 * @param {Object} orderData 订单数据
 * @returns {Promise<Object>} 订单创建结果
 */
export async function createOrder(orderData) {
  try {
    console.log('🚀 创建订单请求:', orderData)
    
    const response = await apiClient.post('/orders/create', orderData)
    
    console.log('✅ 订单创建成功:', response.data)
    return response.data
  } catch (error) {
    console.error('❌ 订单创建失败:', error)
    throw handleError(error)
  }
}

/**
 * 查询订单状态
 * @param {string} orderNo 订单号
 * @returns {Promise<Object>} 订单状态信息
 */
export async function getOrderStatus(orderNo) {
  try {
    console.log('🔍 查询订单状态:', orderNo)
    
    const response = await apiClient.get(`/orders/status/${orderNo}`)
    
    console.log('✅ 订单状态查询成功:', response.data)
    return response.data
  } catch (error) {
    console.error('❌ 订单状态查询失败:', error)
    throw handleError(error)
  }
}

/**
 * 测试RabbitMQ连接
 * @returns {Promise<Object>} 连接测试结果
 */
export async function testConnection() {
  try {
    console.log('🔗 测试RabbitMQ连接...')
    
    const response = await apiClient.get('/orders/test-connection')
    
    console.log('✅ RabbitMQ连接测试成功:', response.data)
    return response.data
  } catch (error) {
    console.error('❌ RabbitMQ连接测试失败:', error)
    throw handleError(error)
  }
}

/**
 * 获取订单列表（现有API）
 * @returns {Promise<Array>} 订单列表
 */
export async function getOrders() {
  try {
    console.log('📋 获取订单列表...')
    
    const response = await apiClient.get('/orders/')
    
    console.log('✅ 订单列表获取成功:', response.data)
    return response.data
  } catch (error) {
    console.error('❌ 订单列表获取失败:', error)
    throw handleError(error)
  }
}

/**
 * 删除订单（现有API）
 * @param {string} orderNo 订单号
 * @returns {Promise<Object>} 删除结果
 */
export async function deleteOrder(orderNo) {
  try {
    console.log('🗑️ 删除订单:', orderNo)
    
    const response = await apiClient.delete(`/orders/${orderNo}`)
    
    console.log('✅ 订单删除成功:', response.data)
    return response.data
  } catch (error) {
    console.error('❌ 订单删除失败:', error)
    throw handleError(error)
  }
}

/**
 * 将购物车商品转换为订单格式
 * @param {Array} cartItems 购物车商品列表
 * @returns {Object} 订单数据
 */
export function convertCartToOrder(cartItems) {
  const goods_ids = []
  const quantities = []
  
  cartItems.forEach(item => {
    goods_ids.push(item.id)
    quantities.push(item.qty)
  })
  
  return {
    goods_ids,
    quantities,
    remark: `购物车订单 - ${new Date().toLocaleString()}`
  }
}

/**
 * 计算订单总金额
 * @param {Array} cartItems 购物车商品列表
 * @returns {number} 总金额
 */
export function calculateTotal(cartItems) {
  return cartItems.reduce((total, item) => {
    return total + (parseFloat(item.price) * parseInt(item.qty))
  }, 0)
}

/**
 * 验证订单数据
 * @param {Object} orderData 订单数据
 * @returns {Object} 验证结果
 */
export function validateOrder(orderData) {
  const errors = []
  
  if (!orderData.goods_ids || orderData.goods_ids.length === 0) {
    errors.push('请选择商品')
  }
  
  if (!orderData.quantities || orderData.quantities.length === 0) {
    errors.push('请设置商品数量')
  }
  
  if (orderData.goods_ids?.length !== orderData.quantities?.length) {
    errors.push('商品和数量不匹配')
  }
  
  // 检查数量是否有效
  if (orderData.quantities?.some(qty => qty <= 0)) {
    errors.push('商品数量必须大于0')
  }
  
  return {
    isValid: errors.length === 0,
    errors
  }
}

// 默认导出包含所有方法的对象
const orderService = {
  createOrder,
  getOrderStatus,
  testConnection,
  getOrders,
  deleteOrder,
  convertCartToOrder,
  calculateTotal,
  validateOrder
}

export default orderService
